Lectura de dades amb yogi

La lectura de dades en Python és, admetem-ho, massa difícil per als principiants. Per solucionar-ho, es pot usar el mòdul yogi. Aquest petit mòdul ofereix funcions senzilles però potents per llegir dades des de Python i és molt útil per resoldre els problemes de Jutge.org.

Aquesta lliçó explica com instal·lar i utilitzar el mòdul yogi.

Instal·lació

Ús bàsic

La funció read() de yogi retorna el següent element (token) de l’entrada. El tipus d’aquest element s’ha de donar com a paràmetre i pot ser un d’aquests tres:

Els elements es separen per paraules. Els blancs i salts de línia no es poden obtenir ja que read() els ignora. Si l’entrada no té més elements, read() provoca una desagradable excepció.

La funció scan() de yogi també retorna el següent element (token) de l’entrada, però en el cas que aquesta acabi (o que el valor llegit no sigui compatible amb el demanat), retorna None. Igual que read(), cal demanar a scan() què es vol llegir:

A més, es pot usar el generador tokens() per anar obtenint el següent element de l’entrada o acabar el bucle quan ja no n’ha més.

Exemples

Programa que saluda

from yogi import read

print('Com et dius?')
nom = read(str)
print('Hola', nom)

Fixeu-vos que amb aquest programa s’aconsegueix la primera paraula escrita per l’usuari, amb independència dels blancs o salts de línia que tingui davant o darrera. Això no es podria haver fet senzillament amb input()!

Programa que llegeix dos nombres i n’escriu la seva suma

from yogi import read

x = read(int)
y = read(int)
print(x + y)

Programa que llegeix una seqüència de reals i n’escriu la seva suma (amb scan())

from yogi import scan

s = 0.0
x = scan(float)
while x is not None:
    s = s + x
    x = scan(float)
print(s)

Fixeu-vos que quan s’usa un terminal, cal senyalar el final de l’entrada amb Control + d a Linux i Mac o amb Control + z a Windows.

Programa que llegeix una seqüència de reals i n’escriu la seva suma (amb tokens())

El programa anterior seria més fàcil d’escriure utilitzant tokens():

from yogi import tokens

s = 0.0
for x in tokens(float):
    s = s + x
print(s)

Informació addicional

Es pot trobar una informació més exhaustiva sobre aquest mòdul a la seva documentació.




Lliçons.jutge.org
Jordi Petit
Universitat Politècnica de Catalunya, 2023

Prohibit copiar. Tots els drets reservats.
No copy allowed. All rights reserved.